/*
 * dialogo-elegir-archivos.cpp
 *
 *  Created on: 10/12/2012
 *      Author: guidi
 */

#include "boton-elegir-archivos.h"
#include "contenedor-nombre-archivo.h"
#include "const.cpp"
#include <gtkmm-3.0/gtkmm/filechooserdialog.h>
#include <gtkmm-3.0/gtkmm/messagedialog.h>
#include <iostream>

const std::string PREFIJO_ARCHIVO = "file://";

BotonElegirArchivos::BotonElegirArchivos(Gtk::Window& ventana,
		Gtk::FileChooserAction accion, bool crearCarpetas,
		std::string extension) :
		dialogo(ventana, "3", accion) {
	setAutoTitle(accion);
	this->extension = extension;
	dialogo.add_button("Cancel", Gtk::RESPONSE_CANCEL);
	dialogo.add_button("Select", Gtk::RESPONSE_OK);
	dialogo.set_create_folders(crearCarpetas);
	this->signal_clicked().connect(
			sigc::mem_fun(*this, &BotonElegirArchivos::mostrar));
}

std::string BotonElegirArchivos::getArchivo() {
	std::string resultado(this->dialogo.get_uri());
	if (resultado.find(PREFIJO_ARCHIVO) == 0)
		resultado.erase(0, PREFIJO_ARCHIVO.size());
	return resultado;
}

void BotonElegirArchivos::setAutoTitle(Gtk::FileChooserAction accion) {
	std::string resultado;
	switch (accion) {
	case Gtk::FILE_CHOOSER_ACTION_SAVE:
		resultado = "Ingresar archivo de entrada";
		break;
	case Gtk::FILE_CHOOSER_ACTION_OPEN:
		resultado = "Ingresar archivo de salida";
		break;
	default:
		break;
	}
	dialogo.set_title(resultado);
}

void BotonElegirArchivos::mostrar() {
	bool finDeCiclo = false;
	do {
		int resultado = dialogo.run();
		std::string archivo;
		ContenedorNombreArchivo contenedor;
		switch (resultado) {
		case (Gtk::RESPONSE_OK):
			archivo = (dialogo.get_filename());
			contenedor = archivo;
			if ((this->extension == "") || (this->extension == contenedor.getExtension())) {
				this->set_label(archivo.substr(1 + archivo.find_last_of('/')));
				finDeCiclo = true;
			} else {
				Gtk::MessageDialog m(MENSAJE_EXTENSION); m.run();
			}
			break;
		case (Gtk::RESPONSE_CANCEL):
			finDeCiclo = true;
			break;
		default:
			break;
		}
	} while (!finDeCiclo);
	dialogo.hide();
}
